/////////////////////////////////////////////////////////////////////////////////////////////
// Filename: State.h
//
// Templated state class that can be used for application state, entity state, or any other
// application of the state pattern where it may be necessary.
//
// (c) Dave Ottley, 2012. All rights reserved.
/////////////////////////////////////////////////////////////////////////////////////////////
#ifndef STATE_H
#define STATE_H

#include "Telegram.h"

template <class entity_type>
class State
{
public:

	virtual void Enter(entity_type*) = 0;
	virtual void Execute(entity_type*) = 0;
	virtual void Exit(entity_type*) = 0;
	virtual bool OnMessage(entity_type*, const Telegram&) = 0;

	virtual ~State() {}

};


#endif // STATE_H